package de.blitzcoder.collide;

// Imports
import de.blitzcoder.collide.util.Log;
import de.blitzcoder.collide.gui.StartupDialog;
import de.blitzcoder.collide.docs.DocParser;
import de.blitzcoder.collide.engine.FileOpener;
import de.blitzcoder.collide.error.ExceptionHandler;
import de.blitzcoder.collide.gui.SplashScreen;
import de.blitzcoder.collide.templatemanager.Template;
import de.blitzcoder.collide.util.OS;

/*
BlitzMax IDE
 **************************************************
Copyright (c) 2007-2008 by Johannes Wotzka
All Rights reserved
---------------------------------------------------
File: CollIDE.java
 */

/*
0.3 final
 *      + Focus events bei DockableDocuments sind noch nicht perfekt
 *      + autokorrektur darf nur bei .bmx-files aktiv sein
 *      + Schauen, wofür addAlias im ContentManager (DockumentDockingManager) da ist
 *      + Compile Error wird nicht geparst (Irgendwie ist das outputpuffern seltsam)
 *      + Speichern unter muss eingebaut werden
 *      + Autokorrektur funktioniert nicht immer
 *      + Siehe PM von Abrexxes
 *      + Minimiert werden die Dokumente nur durchnummeriert
 *      + System.setIn/Out/Err setzt jeweils den PrintStream. DebugLog sollte alles anzeigen
 *      + EndRem-Ersetzen funktioniert nicht ordentlich
 *      + Autokorrektur funktioniert nicht perfekt
 *      + Textwerkzeuge (ein bisschen bei Notepad++ reinschielen)
 *      - Paketstruktur verbessern
 *      - Ersetzen
 *      - Hintergrundfarbe einstellbar machen
 *      - Doku braucht eine Suche
 *      + Wieso hat nur der Fokus-Code buttons im Tab?
 *      + Komisches Layout im Templatemanager
 *      + CloneDocument ins SVN werfen
 *
 */
/**
 * MAIN CLASS
 */
public class CollIDE {

    public static String VERSION = "0.3 rc13";


    public static SplashScreen splash = null;


    /**
     * MAIN METHOD
     */
    public static void main(String[] args) {
        // Check if OS = Windows|Linux|OSX
        // If not, terminate CollIDE
        OS.validateOS();

        // First make sure all the config files are available.
        // If not, copy the templates
        StandardFiles.check();

        // Exception HandlDoo
        Thread.setDefaultUncaughtExceptionHandler(new ExceptionHandler());

        FileOpener.init();

        // Config
        Config.load();

        // Create the spalsh screen
        splash = new SplashScreen();

        // Parse args
        splash.setStatus("Parameter werden verarbeitet");
        processArgs(args);

        // Start Log Entry
        splash.setStatus("Logging-System wird gestartet");
        Log.start();

        // Setting Look and Feel
        splash.setStatus("LookAndFeel wird initialisiert");
        Interface.setLookAndFeel();


        // Read Docs
        try {
            splash.setStatus("Dokumentation wird eingelesen");
            DocParser.parse(splash);
        } catch (Exception ex) {
            ex.printStackTrace();
        }

        //Init Interface
        splash.setStatus("Oberfläche wird aufgebaut");
        Interface.init();

        // Template-Manager
        splash.setStatus("Templates werden geladen");
        Template.loadTemplates();

        // This shows a welcome-dialog at the first IDE-run
        StartupDialog.init();

        // Open the last files
        splash.setStatus("Sitzung wird wiederhergestellt");
        FileOpener.openRecent();

        splash.setStatus("Oberfläche wird fertiggestellt");
        Interface.get().setVisible(true);

        splash.dispose();

    }

    public static void processArgs(String[] args) {

        for (int i = 0; i < args.length; i++) {

            String arg = args[i];

            if (arg.startsWith("--")) {
                arg = arg.substring(2).toLowerCase();
                if (arg.equals("debug")) {
                    Log.setEnabled(true);
                }
            }

        }

    }
}








